import { createWebHistory, createRouter } from 'vue-router';
import axios from '../http';

// 递归函数，用于从后端获取菜单数据并添加路由
async function setupRoutes() {
    try {
        const response = await axios.get('role/getRoutes'); // 获取菜单数据的 API
        const menuData = response.UserData.routes; // 根据实际返回的数据结构调整
        console.log('Fetched routes:', menuData); // 打印获取的路由数据

        // 遍历菜单数据，动态添加路由
        menuData.forEach(item => {
            addRoute(item);
        });
    } catch (error) {
        console.error('Failed to fetch routes:', error);
    }
}

// 递归添加路由的函数
function addRoute(item) {
    const route = {
        path: item.route_path, // 路由路径
        name: item.route_name, // 路由名称
        component: () => import(`../views/${item.component_name}.vue`), // 路由组件，假设组件文件名与 component_name 相同
    };
    router.addRoute(route);

    // 如果有子路由，递归添加
    if (item.children && item.children.length > 0) {
        item.children.forEach(child => {
            addRoute(child);
        });
    }
}

const routes = [
    {
        path: '/',
        redirect: '/login',
        component: () => import('../views/login/login.vue')
    },
    {
        path: '/login',
        name: 'login',
        component: () => import('../views/login/login.vue')
    },
    {
        path: '/layout',
        name: 'Layout',
        component: () => import('../views/Layout/index.vue'),
        children: [] // 初始时为空，后续会动态添加子路由
    },
]

const router = createRouter({
    history: createWebHistory(),
    routes,
})

let isRoutesSetup = false; // 标记路由是否已经设置

router.beforeEach(async (to, from, next) => {
    if (to.path === '/login') {
        next();
    } else {
        if (!isRoutesSetup) {
            await setupRoutes();
            isRoutesSetup = true; // 设置路由后，更新标记

            // 如果是从根路径重定向过来的，跳转到第一个菜单
            if (from.path === '/' && to.path === '/') {
                const firstMenu = router.getRoutes().find(route => route.path !== '/login' && route.path !== '/');
                if (firstMenu) {
                    next({ path: firstMenu.path, replace: true });
                } else {
                    next('/login'); // 如果没有找到合适的路由，重定向到登录页
                }
            } else {
                next({ ...to, replace: true }); // 否则，保持在当前路由
            }
        } else {
            next(); // 如果路由已经设置，直接放行
        }
    }
});

export default router;
